{
    /*
        以前class中也有关键字， static
        用于区分是实例还是静态属性
    */

    interface AAA {
        // name: string,
        age: number
    }
    class Person implements AAA {
        // public 关键字，是默认的形式，代表都可以访问
        public name: string;

        // private /ˈpraɪvət/ 
        // 私有属性，只能作用在当前的class以内，子类都不能用
        // private name: string;

        // protected 受保护的
        // 只能在自己类和子类中使用，不能单独调用
        // protected name: string;
        age: number;

        constructor(n, a) {
            this.name = n;
            this.age = a;
        }

        fn():void {
            console.log(this.name);
        }
    }

    const p1 = new Person('迪丽热巴', 20);
    p1.fn();
    console.log(p1.name);
    

    class Son extends Person {
        constructor(n: string, a: number) {
            super(n, a);
        }

        func() {
            console.log(this.name, 1111);
        }
    }

    const s1 = new Son('古力娜扎', 22)
    s1.fn();
    s1.func();
    console.log(s1.name);
    
}